package com.xuelang.pipeline.domain.pipeline;

import lombok.Data;
import lombok.ToString;

import java.util.Date;
import java.util.Objects;

/**
 * <p>流水线触发配置实体</p>
 *
 * @author : yixin.lys
 * @date : 2024-06-11 17:52
 **/
@ToString
@Data
public class TriggerSetting {

    /**
     * 主键，自增
     */
    private Long id;

    /**
     * 流水线编码
     */
    private String pipelineCode;

    /**
     * 代码库触发，1开启0关闭
     */
    private Integer isCodeTrigger;

    /**
     * Push事件，1开启0关闭
     */
    private Integer isCodePush;

    /**
     * AcceptedMergeRequest事件，1开启0关闭
     */
    private Integer isCodeMerge;

    /**
     * 定时触发，1开启0关闭
     */
    private Integer isClockTrigger;

    /**
     * 触发方式，1周期触发2单次触发3手动触发
     */
    private Integer triggerWay;

    /**
     * 日期选择，1按周选择2按月选择
     */
    private Integer dateSelect;

    /**
     * 触发时间【即，单次触发时间】
     */
    private String triggerTime;

    /**
     * 周期时间表达式
     */
    private String cronExpression;

    /**
     * 代码变更定时器触发，1开启0关闭
     */
    private Integer isCodeChangeTrigger;

    /**
     * 运行通知，1开启0关闭
     */
    private Integer isRunNotify;

    /**
     * 通知方式，1邮箱2站内信，多选用###分割，如1###2
     */
    private String notifyWay;

    /**
     * 通知事件，待定义可选项
     */
    private String notifyEvent;

    /**
     * 通知人类型，1流水线角色2人员3角色
     */
    private Integer notifyReceiverType;

    /**
     * 多个角色或人员，用,分割，如A,B
     */
    private String notifyReceiverList;

    /**
     * 创建人
     */
    private String creatorId;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新人ID
     */
    private String updaterId;

    /**
     * 更新时间
     */
    private Date updateTime;

    public static boolean clockTriggerDifferences(TriggerSetting t1, TriggerSetting t2) {
        if (t1 == null || t2 == null) {
            throw new IllegalArgumentException("TriggerSetting objects cannot be null");
        }

        return !Objects.equals(t1.getTriggerWay(), t2.getTriggerWay()) ||
                !Objects.equals(t1.getTriggerTime(), t2.getTriggerTime()) ||
                !Objects.equals(t1.getCronExpression(), t2.getCronExpression());
    }

}
